iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

我只是想自動執行 Ansible ,一定要用 Jenkins 嗎系列 第 10

手動部署 Python FastAPI demo app in Docker

  • 分享至 

  • xImage
  •  

今天就簡單寫一個用 Python FastAPI 作 backend 的範例,
其實我很不想用 backend 這個 term,
不過好像這樣最容易溝通…

這幾天預計

  1. adhoc 寫一個 Python FastAPI 範例 + Dockerfile <- 現在在這裡
  2. 用 Ansible 遠端部署
  3. 用 Ansible AWX 自動部署

這讓我想起來五、六年前還在純軟公司的時候,
RD team 不會自己 own Dockerfile,
十來個 docker image 全由 DevOps 來 own
然後 Dockerfile 又不是每個 component 底下配置一份,
而是一支 script 一口氣包十來個 docker image,
還包了一堆 legacy depedency

如果提說要 refactor,
大家也都知道提這種東西既沒 visibility,
又要跟 qa team 解釋為什麼要重跑 regression,
總之年輕的 me 也有過這種天真的時刻…再說都是淚

可能是學生時期做過網管的關係,
在 DevOps 這個 term 紅起來之前,
就覺得 backend RD team 自己 own staging environment 不是天經地義的事嗎?
交付邊際切在一個完整的 docker image 聽起來也很合理啊,
理想總是比較骨感…不知道是我的問題還是我沒能去找到改變團隊文化的 key

又扯遠了

先登入 ubuntu-dev-machine,
既然在開發機上,
virtualenv 少不了吧

sudo apt-get install -y python3.10-venv
python3 -m venv ./venv

參考 FastAPI 官方教學,我的檔案會這樣切

.
├── Dockerfile
├── app
├── requirements.txt
└── venv

當然 .gitignore 會加入 venv/ 還有 *.pyc__pycache__

接著

source venv/bin/activate
pip install "fastapi[all]"

裝完記得導出 python package depedencies

pip freeze > requirements.txt

照著官方把 hello world 貼上 app/main.py

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

for python module,加入

touch app/__init__.py

複製官網給的 Dockerfile,port 號請隨意,然後我這邊就跟著開發機用 Python3.10

FROM python:3.10

WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]

到這裡喘一下,
backend 的 hello world + Dockerfile 的 hello world 都準備好了,
來手動部署吧,
docker tag 與 version 請隨意

docker build . -t hello-fastapi:latest

結果如圖
img

檢查一下

docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
hello-fastapi   latest    0a37d1779033   56 minutes ago   1.05GB

把 container 跑起來

docker run -d -p 8080:8080 hello-fastapi:latest

戳一下

curl -k localhost:8080

img

怎麼覺得越寫越像我前兩年棄更的文章CloudNative 開發維運一條龍
當初竟然撐了 18 天啊…
今年不知道能撐幾天,
能撐一天是一天…

不過可以肯定的是,
沒必要我不想再碰 Kubernetes 那種學不動的東西了…
而且現在來寫,
多了很多經驗,
可以負責任的說,
Ansible AWX 真滴適合懶人用,
或是 RD 自己串個自動化也很方便

相對的,
現在除了廢話變多,
技術也變舊了…也比較少人想看
所以說,
Linux Kernel 現在對我來說比較香 wwwww 永遠不退流行

就醬,今天打完收工


上一篇
安裝 Ansible AWX
下一篇
Ansible playbook layout
系列文
我只是想自動執行 Ansible ,一定要用 Jenkins 嗎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言